<?php
/**
 * 改进版的冒泡排序
 */
function bubbleSortOptimize($arr=[])
{
    $count = count($arr);
    if (empty($count))
    {
        return [];
    }
    elseif($count == 1)
    {
        return $arr;
    }
    else
    {
        //控制比较的轮数
        for($i=0;$i<$count;$i++)
        {
            //控制每一轮比较的次数，把最小的或者最大的放在最后或者最前
            for($j=$i+1;$j<$count;$j++)
            {
                if ($arr[$i]<$arr[$j])
                {
                    list($arr[$i],$arr[$j]) = [$arr[$j],$arr[$i]];
                }
            }
        }
        
        return $arr;
    }
}

/**
 * 冒泡排序(粗暴的写法)
 */
function bubbleSort($arr)
{
    $count = count($arr);
    if (empty($count))
    {
        return [];
    }
    elseif($count == 1)
    {
        return $arr;
    }
    else
    {
        //控制比较的轮数
        for($i=0;$i<$count;$i++)
        {
            //控制每一轮比较的次数,每一次都是从头开始比较
            for($j=0;$j<$count-$i-1;$j++)
            {
                if ($arr[$j]>$arr[$j+1])
                {
                    list($arr[$j],$arr[$j+1]) = [$arr[$j+1],$arr[$j]];
                }
            }
        }
        
        return $arr;
    }
}

function bubbleSort0($arr)
{
    $count = count($arr);
    if (empty($count))
    {
        return [];
    }
    elseif($count == 1)
    {
        return $arr;
    }
    else
    {
        for($i=0;$i<$count;$i++)
        {
            for($j=$i+1;$j<$count;$j++)
            {
                if ($arr[$i]>$arr[$j])
                {
                    list($arr[$i],$arr[$j]) = [$arr[$j],$arr[$i]];
                }
                
            }
        }
    
        return $arr;
    
    }
}
function bubbleSort1($arr)
{
    $count = count($arr);
    if (empty($count))
    {
        return [];
    }
    elseif($count == 1)
    {
        return $arr;
    }
    else
    {
        for($i=0;$i<$count;$i++)
        {
            for($j=$count-1;$j>$i;$j--)
            {
                if ($arr[$j]>$arr[$j+1])
                {
                    list($arr[$j],$arr[$j+1]) = [$arr[$j+1],$arr[$j]];
                }
            }
        }
        
        return $arr;
        
    }
}
function bubbleSort2($arr)
{
    $count = count($arr);
    if (empty($count))
    {
        return [];
    }
    elseif($count == 1)
    {
        return $arr;
    }
    else
    {
        $flag = true;
        for($i=1;$i<$count && $flag;$i++)
        {
            $flag = false;
            for($j=$count-1;$j>=$i;$j--)
            {
                if ($arr[$j]>$arr[$j+1])
                {
                    list($arr[$j],$arr[$j+1]) = [$arr[$j+1],$arr[$j]];
                    $flag = true;
                }
            }
        }
        
        return $arr;
    }
}

//$arr = [];
//for($i=0;$i<20000;$i++)
//{
//    $arr[] = mt_rand(-10000,100000);
//}

$arr = [1,2,3,43,121,12,-2,1,3,0.2,121,342];
$before_time = microtime(true);
//bubbleSort($arr);
var_dump(bubbleSort1($arr));
$after_time = microtime(true);
$time = round($after_time-$before_time,3);
echo '耗时'.$time.'秒';
